﻿using System;
using System.Collections.Generic;

namespace Pap.Data
{
    /// <summary>
    /// 
    /// </summary>
    public interface ILoanExecution : IEntity
    {
        /// <summary>
        /// Gets or sets the loan execution ID.
        /// </summary>
        /// <value>
        /// The loan execution ID.
        /// </value>
        Guid LoanExecutionID { get; set; }
        /// <summary>
        /// Gets or sets the loan ID.
        /// </summary>
        /// <value>
        /// The loan ID.
        /// </value>
        Guid LoanID { get; set; }
        /// <summary>
        /// Gets or sets the name of the guarantor.
        /// </summary>
        /// <value>
        /// The name of the guarantor.
        /// </value>
        string GuarantorName { get; set; }
        /// <summary>
        /// Gets or sets the guarantor address.
        /// </summary>
        /// <value>
        /// The guarantor address.
        /// </value>
        string GuarantorAddress { get; set; }
        /// <summary>
        /// Gets or sets the guarantor SSN.
        /// </summary>
        /// <value>
        /// The guarantor SSN.
        /// </value>
        string GuarantorSSN { get; set; }
        /// <summary>
        /// Gets or sets the interest percentage.
        /// </summary>
        /// <value>
        /// The interest percentage.
        /// </value>
        decimal InterestPercentage { get; set; }
        /// <summary>
        /// Gets or sets the loan payment method ID.
        /// </summary>
        /// <value>
        /// The loan payment method ID.
        /// </value>
        Guid LoanPaymentMethodID { get; set; }
        /// <summary>
        /// Gets or sets the loan amount.
        /// </summary>
        /// <value>
        /// The loan amount.
        /// </value>
        double LoanAmount { get; set; }
        /// <summary>
        /// Gets or sets the loan period.
        /// </summary>
        /// <value>
        /// The loan period.
        /// </value>
        int LoanPeriod { get; set; }
        /// <summary>
        /// Gets or sets the total loan amount.
        /// </summary>
        /// <value>
        /// The total loan amount.
        /// </value>
        double TotalLoanAmount { get; set; }
        /// <summary>
        /// Gets or sets the execution date.
        /// </summary>
        /// <value>
        /// The execution date.
        /// </value>
        DateTime ExecutionDate { get; set; }
        /// <summary>
        /// Gets or sets the check number.
        /// </summary>
        /// <value>
        /// The check number.
        /// </value>
        string CheckNumber { get; set; }
        /// <summary>
        /// Gets or sets the check date.
        /// </summary>
        /// <value>
        /// The check date.
        /// </value>
        Nullable<DateTime> CheckDate { get; set; }
        /// <summary>
        /// Gets or sets a value indicating whether [loan execution status].
        /// </summary>
        /// <value>
        ///   <c>true</c> if [loan execution status]; otherwise, <c>false</c>.
        /// </value>
        bool LoanExecutionStatus { get; set; }

        /// <summary>
        /// Gets the customer loan.
        /// </summary>
        ICustomerLoan CustomerLoan { get; }
        /// <summary>
        /// Gets the payment method obj.
        /// </summary>
        ILoanPaymentMethod PaymentMethodObj { get; }
        /// <summary>
        /// Gets the loan execution installments LST.
        /// </summary>
        IEnumerable<ILoanExecutionInstallment> LoanExecutionInstallmentsLst { get; }
        /// <summary>
        /// Gets the loan execution attachments LST.
        /// </summary>
        IEnumerable<ILoanExecutionAttachment> LoanExecutionAttachmentsLst { get; }

        /// <summary>
        /// Adds the installment.
        /// </summary>
        /// <param name="installment">The installment.</param>
        void AddInstallment(ILoanExecutionInstallment installment);
    }
}
